<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            padding: 0;
            margin: 0;
        }

        html {
            height: 5000px;
        }
    </style>
</head>

<body>

</body>
<script>
    // 函数节流 -> 函数在短时间内频繁执行 ->  降低执行的频率

    // 原始代码
    // window.onscroll = function () {
    //     var scrollTop = document.documentElement.scrollTop;
    //     console.log("scrolling", scrollTop);
    // }


    // var start = Date.now(); // 获取当前时间对应的毫秒数  new Date()*1
    // window.onscroll = function () {
    //     var now = Date.now();
    //     if (now - start >= 300) {
    //         var scrollTop = document.documentElement.scrollTop;
    //         console.log("scrolling", scrollTop);

    //         start = now; // 下次执行 要比当前时间 多至少300ms
    //     }
    // }


    // 调用throttleFn() 根据原函数(回调函数->原本期望执行的内容) 得到一个新函数
    // 新函数执行时,只是多了个节流功能,最终还是要执行 原函数(回调函数->原本期望执行的内容)
    // 需要将 新函数的this指向和接收的参数 原封不动的传递给 -> 原函数(回调函数->原本期望执行的内容)

    function scrollHandler(e) {
        var scrollTop = document.documentElement.scrollTop;
        console.log("scrolling", scrollTop);
        console.log(this);
        console.log(e);
    }
    var newFn = throttleFn(scrollHandler, 300);
    console.log(newFn);
    window.onscroll = newFn;


    function throttleFn(callbackFn, delay = 0) {
        var start = Date.now();
        return function (...args) {
            var now = Date.now();
            if (now - start >= delay) {
                callbackFn.apply(this, args);
                start = now; // 下次执行 要比当前时间 多至少300ms
            }
        }
    }


    // 

</script>

</html>